package com.way.demo.hw.od;

import java.util.Scanner;

/**
 * @author lipingwei
 * @create 2024-03-23 21:18
 *
 * 在一棵树中，每个节点代表一个家庭成员，节点的数字表示其个人的财富值，一个节点及其直接相连的子节点被定义为一个小家庭。
 *
 * 现给你一棵树，请计算出最富裕的小家庭的财富和。
 *
 * 输入
 * 第一行为一个数N，表示成员总数，成员编号1-N,1<=N<=1000
 * 第二行为N个空格分隔的数，表示编号1-N的成员的财富值。0<=财富值<=1000000
 *
 * 接下来N-1行，每行两个空格分隔的整数(N1N2)，表示N1是N2的父节点。
 *
 * 输出
 * 最富裕的小家庭的财富和
 *
 *
 *
 *
 */
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();

        int[] perMoney=new int[n+2];
        int[] famMoney=new int[n+2];

        for (int i = 1; i <= n; i++) {
           int money= in.nextInt();
            perMoney[i]=money;
            famMoney[i]=perMoney[i];
        }
        for (int i = 1; i < n; i++) {
            int n1 = in.nextInt();
            int n2 = in.nextInt();
            famMoney[n1] += perMoney[n2];
        }
        int max = 0;
        for (int i = 1; i <= n; i++) {
            max = famMoney[i] > max ? famMoney[i] : max;
        }
        System.out.println(max);

    }

    }







